/*
 * Bola.java
 *
 * Created on 16 de julio de 2006, 1:42
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package futbol;

import java.awt.Point;

/**
 *
 * @author Administrador
 */
public class Bola {
    
    private double x, y, angulo;
    private int velocidad;
    private int antiBloqueo[]=new int[5];
    private int nBloqueoActivado=0;
    private int nGolpeada=0;  

    public Bola(){
        reserSistemaAntibloqueo();
    }
    
    public void setGolpeada(int nValor){
        nGolpeada=nValor;
    }
    
    public double getX(){
        return x;
    }

    public double getY(){
        return y;
    }
    
    public int getVelocidad(){
        return velocidad;
    }
    
    public void setXY(double nx, double ny){
        x=nx;
        y=ny;
        velocidad=0;
    }
    
    public Point getPoint(int f){
        Point p=new Point();
        p.setLocation(x*f, y*f);
        return p;
    }
    
    public int esGol(){
        if (x>=160 && y>-30 && y<30) return 0;
        if (x<=-160 && y>-30 && y<30) return 1;
        return -1;
    }
    
    public void golpearBola(int equipo, int jugador, double xDes, double yDes, int nFuerza){
        if (velocidad<15){
            nGolpeada=2;
            angulo=General.getAngulo(x,y,xDes,yDes) + (Math.random() * Math.PI/5 - Math.PI/10) ;
            velocidad=nFuerza*3;
            for (int n=0;n<4;n++){
                antiBloqueo[n]=antiBloqueo[n+1];
            }
            antiBloqueo[4]=jugador*10+equipo;
            boolean bBloqueo=false;
            if (antiBloqueo[0]==antiBloqueo[2] && antiBloqueo[0]==antiBloqueo[4] && antiBloqueo[1]==antiBloqueo[3])
                bBloqueo=true;
            if (antiBloqueo[0]==antiBloqueo[1] && antiBloqueo[0]==antiBloqueo[4] && antiBloqueo[2]==antiBloqueo[3])
                bBloqueo=true;
            if (antiBloqueo[0]==antiBloqueo[3] && antiBloqueo[1]==antiBloqueo[4] )
                bBloqueo=true;
            
            //Para que se lance el sistema antibloqueo es necesario que en los ltimos cinco golpes lo hagan tocado ambos equipos.
            //Contamos el tipo de equipo 0 o 1 y si la suma es 0 o es 5 no debe haber bloqueo
            int nContarTipoEquipo=0;
            for (int n=0;n<antiBloqueo.length;n++)
                nContarTipoEquipo += antiBloqueo[n]%10; //El tipo de equipo son las unidades 0 o 1
            if (nContarTipoEquipo==0 || nContarTipoEquipo==5)
                bBloqueo=false;  //Rectificamos el bloqueo.
            
            if (bBloqueo){
                velocidad=16;  //Es necesario que el bloqueo sea 16 ya que ninguno de los dos jugadores le debe golpear velocidad<15
                angulo=(Math.random()*Math.PI*2);
                nBloqueoActivado=10;
            }
        }
    }
    
    public void mover(){
        if (nGolpeada>0) nGolpeada--;
        if (nBloqueoActivado>0) nBloqueoActivado--;
        for (int n=0;n<velocidad && esGol()==-1;n++){
            x+=Math.cos(angulo);
            y+=Math.sin(angulo);
            if (esGol()==-1){
                if (x>160){
                    x=320-x;  //160 - (x-160)
                    angulo=General.corregirAngulo(Math.PI-angulo);
                }
                if (x<-160){
                    x=-320-x; //-160 + (-160-x)
                    angulo=General.corregirAngulo(Math.PI-angulo);
                }
                if (y>120){
                    y=240-y; //120 - (x-120)
                    angulo=General.corregirAngulo(-angulo);
                }
                if (y<-120){
                    y=-240-y;  //-120 + (-120-x)
                    angulo=General.corregirAngulo(-angulo);
                }
            }
        }
        if (velocidad>0) velocidad--;
    }
    
    public int getGolpeada(){
        return nGolpeada;
    }
    
    public void reserSistemaAntibloqueo(){
        if (nBloqueoActivado>0) nBloqueoActivado--;
        for (int n=0;n<antiBloqueo.length;n++){
            antiBloqueo[n]=9; //Poniendo todos los valores a 9 el sistema antibloqueo no se lanzar al sacar
        }
    }
    
    public int getBloqueoActivado(){
        return nBloqueoActivado;
    }
    
}
